package com.warom.sdg.util;

import java.util.HashMap;
import java.util.Map;

/**
 * PLC地址配置工具类
 * 用于统一管理PLC的地址配置
 */
public class PlcAddressConfig {
    // 寄存器类型定义
    public static final int TYPE_COIL = 0;              // 线圈
    public static final int TYPE_DISCRETE_INPUT = 1;    // 离散量输入
    public static final int TYPE_INPUT_REGISTER = 3;    // 输入寄存器
    public static final int TYPE_HOLDING_REGISTER = 4;  // 保持寄存器
    
    // PLC地址映射
    private static Map<String, Integer> addressMap = new HashMap<>();
    private static Map<String, Integer> typeMap = new HashMap<>();
    
    static {
        // 初始化地址映射
        // 保持寄存器
        addressMap.put("设备状态", 40100);
        addressMap.put("温度设定", 40101);
        addressMap.put("湿度设定", 40102);
        addressMap.put("控制模式", 40103);
        
        // 输入寄存器
        addressMap.put("当前温度", 30100);
        addressMap.put("当前湿度", 30101);
        addressMap.put("光照强度", 30102);
        
        // 线圈
        addressMap.put("加热开关", 0100);
        addressMap.put("风机开关", 0101);
        addressMap.put("灯光开关", 0102);
        
        // 初始化类型映射
        typeMap.put("设备状态", TYPE_HOLDING_REGISTER);
        typeMap.put("温度设定", TYPE_HOLDING_REGISTER);
        typeMap.put("湿度设定", TYPE_HOLDING_REGISTER);
        typeMap.put("控制模式", TYPE_HOLDING_REGISTER);
        
        typeMap.put("当前温度", TYPE_INPUT_REGISTER);
        typeMap.put("当前湿度", TYPE_INPUT_REGISTER);
        typeMap.put("光照强度", TYPE_INPUT_REGISTER);
        
        typeMap.put("加热开关", TYPE_COIL);
        typeMap.put("风机开关", TYPE_COIL);
        typeMap.put("灯光开关", TYPE_COIL);
    }
    
    /**
     * 获取指定名称的PLC地址
     * @param name 地址名称
     * @return 地址值，如果不存在返回-1
     */
    public static int getAddress(String name) {
        return addressMap.containsKey(name) ? addressMap.get(name) : -1;
    }
    
    /**
     * 获取指定名称的PLC地址类型
     * @param name 地址名称
     * @return 地址类型，如果不存在返回-1
     */
    public static int getType(String name) {
        return typeMap.containsKey(name) ? typeMap.get(name) : -1;
    }
    
    /**
     * 添加自定义地址配置
     * @param name 地址名称
     * @param address 地址值
     * @param type 地址类型
     */
    public static void addConfig(String name, int address, int type) {
        addressMap.put(name, address);
        typeMap.put(name, type);
    }
} 